import junit.framework.Assert;
import junit.framework.TestCase;


@SuppressWarnings("deprecation")
public class LiczbaTest extends TestCase {

	protected Liczba liczba;
	protected int[] liczbaCorrectValueInput = {2, 1, 23, 38, 59, 299, 4325};
	protected int[] liczbaBaseInput = {2, 16, 4, 6, 8, 16, 14};
	protected String[] liczbaAnswers = {"10", "1", "113", "102", "73", "12b", "180d"};
	
	//******************************
	
	protected void setUp() throws Exception {
		super.setUp();
		liczba = new Liczba(0);
	}
	
	//******************************
	
	public void testLiczba() {
		liczba = new Liczba();
		
		Assert.assertNotNull("Creating of object Liczba failed",liczba); // I
		Assert.assertTrue("Wrong number value after default constructor.",liczba.number == 0); // II
	}
	
	//******************************

	public void testLiczbaInt() {
		
		Assert.assertNotNull("Creating of object Liczba failed",liczba);
		
		try {
			liczba = new Liczba(5);
			Assert.assertFalse("Wrong number value after constructor with parameter.", liczba.number != 5); // III
		} catch (LiczbaException e) {}
		
		try {
			liczba = new Liczba(-5);
			Assert.fail("Not natural number should generate exception (Constructor with parameter)."); // IV
		} catch (LiczbaException e) {}
		
		try {
			liczba = new Liczba(0);
			Assert.assertEquals("Constructor with 0 parameter not working", 0, liczba.number); // V
		} catch (LiczbaException e) {}
	}

	//******************************

	public void testGetNumberWithBase() {

		try {
			liczba = new Liczba();
			Assert.assertEquals("Wrong 0 conversion", "0", liczba.getNumberWithBase(7));
		} catch (LiczbaException e) {}
		
		liczba.number = -5;
		
		try {
			liczba.getNumberWithBase(5);
			Assert.fail("Number changing should be checked before accessing number data.");
		} catch (LiczbaException e) {}
		
		liczba.number = 5;
		try {
			Assert.assertTrue("Wrog converion after number changing.", liczba.getNumberWithBase(2).equals("101"));
		} catch (LiczbaException e) {}
		
		try {
			liczba.getNumberWithBase(-2);
			Assert.fail("Base not within natural range of <2,16> should throw exception.");
		} catch (LiczbaException e) {}
		
		try {
			for(int i = 0; i < liczbaCorrectValueInput.length; i++) {
				liczba.number = liczbaCorrectValueInput[i];
				Assert.assertEquals("Conversion error!", liczbaAnswers[i], liczba.convert(liczbaBaseInput[i]));
			}
		} catch (LiczbaException e) {}
		
		try {
			for(int i = 0; i < liczbaCorrectValueInput.length; i++) {
				liczba.number = liczbaCorrectValueInput[i];
				Assert.assertEquals("Conversion error!", liczbaAnswers[i], liczba.getNumberWithBase(liczbaBaseInput[i]));
			}
		} catch (LiczbaException e) {}
	}
}
